package com.b511.swpu.cementbackend.util;

import com.b511.swpu.cementbackend.dto.output.ParentOutDto;

import java.util.ArrayList;
import java.util.List;

public class TreeNodeUtils {
    private List<ParentOutDto> treeNodeList;

    public TreeNodeUtils(List<ParentOutDto> treeNodeList) {
        this.treeNodeList = treeNodeList;
    }

    /**
     * 生成以id为根节点的树
     *
     * @param id
     * @return
     */
    public ParentOutDto generateTree(String id) {
        ParentOutDto root = getById(id);
        List<ParentOutDto> childNodes = getChildrenById(id);
        if (childNodes != null && childNodes.size() > 0) {
            for (ParentOutDto node : childNodes) {
                // 将子节点作为根，查找子节点的子节点
                ParentOutDto childRoot = generateTree(node.getId());
                root.getChildren().add(childRoot);
            }
        }

        return root;
    }

    /**
     * 根据id查找节点
     *
     * @param id
     * @return
     */
    private ParentOutDto getById(String id) {
        for (ParentOutDto node : treeNodeList) {
            if (node.getId().equals(id)) {
                return node;
            }
        }

        return null;
    }

    /**
     * 根据id查找所有的子节点
     *
     * @param id
     * @return
     */
    private List getChildrenById(String id) {
        List<ParentOutDto> childNodes = new ArrayList<>();
        for (ParentOutDto node : treeNodeList) {
            if (node.getParentId() != null && node.getParentId().equals(id)) {
                childNodes.add(node);
            }
        }

        return childNodes;
    }
}
